package com.booksystem.controller;

import com.booksystem.common.RestResult;
import com.booksystem.dto.AddDeliveryDTO;
import com.booksystem.dto.ConfigShippingMethodDTO;
import com.booksystem.dto.QueryDeliveryDetailDTO;
import com.booksystem.dto.UpdateDeliveryStatusDTO;
import com.booksystem.entity.DeliveryInfo;
import com.booksystem.service.DeliveryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 物流配送控制器
 * </p>
 * @author 段伟豪
 */
@Api("物流配送管理")
@RestController
@RequestMapping("/delivery")
public class DeliveryController {

    @Autowired
    private DeliveryService deliveryService;

    /**
     * 新增配送信息
     *
     * @param addDeliveryDTO 新增配送信息参数
     * @return RestResult 结果
     */
    @PostMapping("/add")
    @ApiOperation("新增配送信息")
    public RestResult<Boolean> addDelivery(@RequestBody @Valid AddDeliveryDTO addDeliveryDTO) {
        return deliveryService.addDelivery(addDeliveryDTO);
    }

    /**
     * 更新配送状态
     *
     * @param updateDeliveryStatusDTO 更新配送状态参数
     * @return RestResult 结果
     */
    @PutMapping("/status")
    @ApiOperation("更新配送状态")
    public RestResult<Boolean> updateDeliveryStatus(@RequestBody @Valid UpdateDeliveryStatusDTO updateDeliveryStatusDTO) {
        return deliveryService.updateDeliveryStatus(updateDeliveryStatusDTO);
    }

    /**
     * 查询配送详情
     *
     * @param queryDeliveryDetailDTO 查询配送详情参数
     * @return RestResult 结果
     */
    @GetMapping("/detail")
    @ApiOperation("查询配送详情")
    public RestResult<DeliveryInfo> queryDeliveryDetail(@Valid QueryDeliveryDetailDTO queryDeliveryDetailDTO) {
        return deliveryService.queryDeliveryDetail(queryDeliveryDetailDTO);
    }

    /**
     * 配置配送方式
     *
     * @param configShippingMethodDTO 配置配送方式参数
     * @return RestResult 结果
     */
    @PostMapping("/config/method")
    @ApiOperation("配置配送方式")
    public RestResult<Boolean> configShippingMethod(@RequestBody @Valid ConfigShippingMethodDTO configShippingMethodDTO) {
        return deliveryService.configShippingMethod(configShippingMethodDTO);
    }
}